<?php
namespace app\admin\model;

use think\Model;

class Admin extends Model
{
    protected $name = 'admin';
    
    // 设置字段信息
    protected $schema = [
        'id'              => 'int',
        'username'        => 'string',
        'password'        => 'string',
        'nickname'        => 'string',
        'email'           => 'string',
        'role'            => 'string',
        'status'          => 'int',
        'last_login_time' => 'int',
        'last_login_ip'   => 'string',
        'create_time'     => 'int',
        'update_time'     => 'int',
    ];
    
    // 自动时间戳
    protected $autoWriteTimestamp = true;
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
    
    // 密码修改器 - 自动加密
    public function setPasswordAttr($value)
    {
        if (!empty($value)) {
            return password_hash($value, PASSWORD_DEFAULT);
        }
        return $value;
    }
    
    // 验证密码
    public function checkPassword($password, $hash)
    {
        return password_verify($password, $hash);
    }
    
    // 获取角色文本
    public function getRoleTextAttr($value, $data)
    {
        $roleMap = [
            'super_admin' => '超级管理员',
            'admin' => '普通管理员'
        ];
        
        return $roleMap[$data['role']] ?? '未知';
    }
    
    // 获取状态文本
    public function getStatusTextAttr($value, $data)
    {
        return $data['status'] == 1 ? '正常' : '禁用';
    }
    
    // 是否为超级管理员
    public function isSuperAdmin()
    {
        return $this->role === 'super_admin';
    }
    
    // 是否可以被删除
    public function canDelete($currentUserId = null)
    {
        // 超级管理员不能被删除
        if ($this->role === 'super_admin') {
            return false;
        }
        
        // 不能删除自己
        if ($currentUserId && $this->id == $currentUserId) {
            return false;
        }
        
        return true;
    }
    
    // 是否可以被禁用
    public function canDisable($currentUserId = null)
    {
        // 超级管理员不能被禁用
        if ($this->role === 'super_admin') {
            return false;
        }
        
        // 不能禁用自己
        if ($currentUserId && $this->id == $currentUserId) {
            return false;
        }
        
        return true;
    }
    
    // 是否可以编辑密码
    public function canEditPassword($currentUserRole = null)
    {
        // 如果是超级管理员，只有超级管理员才能编辑
        if ($this->role === 'super_admin') {
            return $currentUserRole === 'super_admin';
        }
        
        return true;
    }
    
    // 搜索器
    public function searchUsernameAttr($query, $value)
    {
        $query->where('username', 'like', '%' . $value . '%');
    }
    
    public function searchNicknameAttr($query, $value)
    {
        $query->where('nickname', 'like', '%' . $value . '%');
    }
    
    public function searchEmailAttr($query, $value)
    {
        $query->where('email', 'like', '%' . $value . '%');
    }
    
    public function searchStatusAttr($query, $value)
    {
        $query->where('status', '=', $value);
    }
    
    public function searchRoleAttr($query, $value)
    {
        $query->where('role', '=', $value);
    }
}
